﻿/**
 * @function Flash ShareObject本地存储
 * @encode utf-8
 * @copyright (C) lijun
 * @file so.js
 * @author lijun
 * @version 1.0
 * @date 2010-4-18
 */
 
 XLib.SO = {
    ready : false, //是否准备
    swf : null, //swf对象
    /**
     * 由flash回调设置组件是否为可用状态
     * @param Boolean ready
     */
    fireReady : function(ready){
        this.ready = ready
    },
    /**
     * 获取swf对象
     * @param Node swf     
     */
    getSWF : function(){
        var o = XLib.DOM.$E("xlib_so_swf");
        if(UA.Browser.ie <= 0){
            o = XLib.DOM.$T("embed")[0];
        }
        return o;
    },
    /**
     * 设置项目
     * @param String key 键
     * @param * value 值
     * @param Number expired 过期时间（MS）
     * @return Boolean __ok 是否设置成功
     */
    setItem : function(key, value, expired){  
        expired = expired || 0;
        if(this.ready){
            return this.swf.setItem(key, value, expired);
        }
        return false;
    },
    /**
     * 获取项目
     * @param String key 键
     * @return * data 数据
     */
    getItem : function(key){  
        if(this.ready){
            return this.swf.getItem(key);
        }
        return null;
    },
    /**
     * 删除项目
     * @param String key 键
     * @return Boolean __ok 是否删除成功
     */
    removeItem : function(key){  
        if(this.ready){
            return this.swf.removeItem(key);
        }
        return false;
    },
    /**
     * 清空
     */
    clear : function(){  
        if(this.ready){
            this.swf.clear();
        }
    },
    /**
     * 获取存储数据大小
     * @return Number size 存储数据的大小
     */
    getSize : function(){  
        if(this.ready){
            return this.swf.getSize();
        }
        return -1;
    },
    /**
     * 获取本地路径
     * @return String path 本地路径
     */
    getLocalPath : function(){  
        if(this.ready){
            return this.swf.getLocalPath();
        }
        return null;
    },
    /**
     * 是否设置为secure方式
     * @return Boolean sec 是否为secure方式
     */
    isSecure : function(){  
        if(this.ready){
            return this.swf.isSecure();
        }
        return false;
    },
    /**
     * 绘制SO对象
     * @param String resource 资源文件路径
     * @param String localPath 创建了共享对象的 SWF 文件的完整路径或部分路径，这将确定共享对象的本地存储位置
     * @param Boolean secure 确定对此共享对象的访问是否只限于通过 HTTPS 连接传递的 SWF 文件
     */
    draw : function(resource, localPath, secure){
        var _path = localPath || "";
        var _sec = ((true === secure) ? 1 : 0);
        var _res = resource || "";
        var _swfFile = resource + "so/bin/so.swf?localPath="+_path+"&secure="+_sec+"&rnd=" + (new Date().getTime());
        var _p = (location.protocol == "https:") ? "https" : "http";
        
        var str  = '<object id="xlib_so_swf" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+_p+'://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="1" height="1">'
            + '<param name="allowScriptAccess" value="sameDomain" />'
            + '<param name="allowFullScreen" value="false" />'
            + '<param name="movie" value="'+_swfFile+'" />'
            + '<embed name="xlib_so_swf" src="'+_swfFile+'" width="1" height="1" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="'+_p+'://www.adobe.com/go/getflashplayer_cn" />'
            + '</object>';
        
        var container = XLib.DOM.$E("xlib_so_container");
        
        if(null == container){
            container = XLib.DOM.$C("span");
            container.setAttribute("id", "xlib_so_container");
            XLib.DOM.$A(container, document.body);
        }
        container.innerHTML = str;
        container = null;
        
        this.swf = this.getSWF();
    }
 };
